﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace Dillon.CSV
{
    //class Program
    //{
    //    static bool printTableValue = false;
    //    static void Main(string[] args)
    //    {
    //        string line;
    //        while ((line = Console.ReadLine()) != "Exit")
    //        {
    //            switch (line.ToUpper())
    //            {
    //                case "O":
    //                case "OPEN":
    //                    printTableValue = true;
    //                    continue;
    //                case "C":
    //                case "CLOSE":
    //                    printTableValue = false;
    //                    continue;
    //                default:
    //                    break;
    //            }

    //            var value = line;
    //            if (System.IO.File.Exists(value))
    //            {
    //                using (var sr = new System.IO.StreamReader(value, Encoding.Default))
    //                    value = sr.ReadToEnd();
    //            }
    //            System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
    //            sw.Start();
    //            var result = Parse(value);
    //            sw.Stop();
    //            if (printTableValue)
    //            {
    //                PrintTableValue(result);
    //            }
    //            Console.WriteLine();
    //            Console.WriteLine(string.Format("解析時間：{0}  {1} 件", sw.Elapsed, result.Count));
    //        }

    //    }

    //    static IList<IList<string>> Parse(string value)
    //    {
    //        TableValueLexer lexer = new TableValueLexer(new StringReader(value), new char[] { ',', '\t' });
    //        IParser parser = new Parser(lexer);

    //        return parser.ParseTableValue();
    //    }

    //    static void PrintTableValue(IList<IList<string>> tableValues)
    //    {
    //        var maxColumnCount = GetMaxCount(tableValues);
    //        for (int i = 0; i < tableValues.Count; i++)
    //        {
    //            if (i > 0)
    //            {
    //                Console.WriteLine();
    //            }
    //            Console.Write(string.Format("第{0}行　", (i + 1).ToString("D" + tableValues.Count.ToString().Length)));
    //            Console.Write(string.Format("コラム数：{0}", (tableValues[i].Count).ToString("D" + maxColumnCount.ToString().Length)));

    //            Console.Write(">>>>");
    //            PrintRowValues(tableValues[i]);
    //        }

    //    }

    //    static int GetMaxCount(IList<IList<string>> tableValues)
    //    {
    //        int count = 0;
    //        foreach (var item in tableValues)
    //        {
    //            count = Math.Max(count, item.Count);
    //        }
    //        return count;
    //    }

    //    static void PrintRowValues(IList<string> rowValules)
    //    {
    //        for (int i = 0; i < rowValules.Count; i++)
    //        {
    //            if (i > 0)
    //            {
    //                Console.Write(" ┃ ");
    //            }

    //            foreach (var item in rowValules[i])
    //            {
    //                switch (item)
    //                {
    //                    case '\t':
    //                        Console.Write(@"\t");
    //                        break;
    //                    case '\r':
    //                        Console.Write(@"\r");
    //                        break;
    //                    case '\n':
    //                        Console.Write(@"\n");
    //                        break;
    //                    default:
    //                        Console.Write(item);
    //                        break;
    //                }

    //            }
    //        }
    //    }

    //    static int GetColumnMaxCharCount(IList<IList<string>> tableValues, int columnIndex)
    //    {
    //        int columnMaxCharCount = 0;
    //        foreach (var item in tableValues)
    //        {
    //            if (item.Count <= columnIndex)
    //            {
    //                continue;
    //            }
    //            columnMaxCharCount = Math.Max(columnMaxCharCount, item[columnIndex].Length);
    //        }
    //        return columnMaxCharCount;
    //    }

    //}
}
